package org.mparts.shared.request;

import java.util.List;

import org.mparts.server.bean.NewsLoadResultBean;
import org.mparts.server.bean.PartitemLoadResultBean;
import org.mparts.server.bean.PartitemPagingLoadResultBean;
import org.mparts.server.locator.MpartsLocator;
import org.mparts.server.service.MpartService;
import org.mparts.shared.proxy.AutoProxy;
import org.mparts.shared.proxy.EngineProxy;
import org.mparts.shared.proxy.NewsProxy;
import org.mparts.shared.proxy.PartgroupProxy;
import org.mparts.shared.proxy.PartitemProxy;

import com.google.web.bindery.requestfactory.shared.ProxyFor;
import com.google.web.bindery.requestfactory.shared.RequestContext;
import com.google.web.bindery.requestfactory.shared.Service;
import com.google.web.bindery.requestfactory.shared.Request;
import com.google.web.bindery.requestfactory.shared.ValueProxy;
import com.sencha.gxt.data.shared.SortInfo;
import com.sencha.gxt.data.shared.loader.FilterConfig;
import com.sencha.gxt.data.shared.loader.ListLoadResult;
import com.sencha.gxt.data.shared.loader.PagingLoadResult;

@Service(value = MpartService.class, locator = MpartsLocator.class)
public interface MpartsRequest extends RequestContext {

	Request<List<PartgroupProxy>> findAllPartgroups();

	Request<List<AutoProxy>> findAutos();

	Request<List<EngineProxy>> findAllEngines();

	@ProxyFor(NewsLoadResultBean.class)
	public interface NewsLoadResultProxy extends ValueProxy,
			ListLoadResult<NewsProxy> {
		@Override
		public List<NewsProxy> getData();
	}

	Request<NewsLoadResultProxy> lastNews();
	Request<Void> saveNews(NewsProxy p);
	Request<Void> deleteNews(NewsProxy p);

	@ProxyFor(PartitemLoadResultBean.class)
	public interface PartitemLoadResultProxy extends ValueProxy,
			ListLoadResult<PartitemProxy> {
		@Override
		public List<PartitemProxy> getData();
	}

	Request<PartitemLoadResultProxy> partitemList();

	Request<PartitemLoadResultProxy> findPartitems(String criteria);

	Request<Void> savePartitem(PartitemProxy p);
	Request<Void> deletePartitem(PartitemProxy p);

	@ProxyFor(PartitemPagingLoadResultBean.class)
	public interface PartitemPagingLoadResultProxy extends ValueProxy,
			PagingLoadResult<PartitemProxy> {
		@Override
		public List<PartitemProxy> getData();
	}

	Request<PartitemPagingLoadResultProxy> partitemList(int offset, int limit,
			List<? extends SortInfo> sortInfo,
			List<? extends FilterConfig> filterConfig);

}
